colorscheme:
yellow
violet
bw
Prihlásenie:
Login: Heslo:

Problem statement: zenit15ckf

Fušerská robota

Počet bodov: 30, časový limit: 1000ms

Cieľom hry Minesweeper je zistiť pozíciu mín na hracej mriežke bez toho, aby ste nejakú odpálili. Na začiatku hry sú všetky políčka zakryté. Kliknutím na políčko sa na ňom zobrazí počet mín, ktoré sú na susedných ôsmich políčkach (čiže políčko s číslom 8 je úplne obklopené mínami). Kliknutie na mínu ju odpáli a ukončí hru.

Ako veľký fanúšik, Matúš začal hrať hneď po inštalácii svojho nového operačného systému1. Po niekoľkých hrách však ostal zhrozený. Vývojári totiž obtiažnosť hry veľmi zjednodušili. Začal preto prehľadávať zákutia internetu, až kým nenašiel pravú výzvu – Depresso Minesweeper.

Prvé kliknutie v hre Depresso Minesweeper zaručene netrafí mínu a odokryje aj susedné políčka, na ktorých tiež zaručene nebude mína. Kliknutie do stredu teda odkryje štvorec veľkosti \(3\times3\), kliknutie na okraj mapy odkryje obdĺžnik \(3\times2\) a kliknutie do rohu odkryje štvorec \(2\times2\) Na rozdiel od bežnej verzie Minesweeper, odkrytie nuly neodkryje ďalšie políčka, odkryjú sa len políčka susediace s kliknutým. Avšak z týchto odkrytých políčok už nie je o žiadnom inom políčku možné zistiť, či na ňom leží mína, alebo nie. Depresso minesweeper je dokonca až tak zákerné, že vám neukáže počet mín na ploche.

Matúš si však myslí, že existujú prípady, kedy sa takáto hra nedá vyrobiť. Ručne kontrolovať kopu mapiek sa však nechce ani tak zanietenému hľadačovi mín, ako je on. Preto vás požiadal, aby ste mu na to spravili program.

 Úloha

Dostanete zadané parametre hry Depresso Minesweeper (veľkosť hracej plochy) a súradnice políčka, ktoré bolo kliknuté ako prvé.

Vašou úlohou je nájsť niekoľko mapiek rozloženia mín tak, aby platilo nasledovné:

  • Na každej mapke sú čísla na políčkach odokrytých prvým kliknutím rovnaké (prvé kliknutie odkryje len kliknuté políčko a políčka s ním susediace).
  • Pre všetky ostatné políčka existuje mapka, v ktorej na políčku je mína, a mapka, v ktorej na políčku nie je mína (t.j. o týchto políčkach nevieme povedať, či na nich mína je, alebo nie)

Vstup a výstup

Na prvom riadku dostanete dve medzerou oddelené čísla. \(r\) – počet riadkov \((1 \leq r \leq 50)\), \(c\) – počet stĺpcov mapy \((1 \leq c \leq 50)\).

Na druhom riadku dostanete medzerou oddelené \(y\) \((1\leq y \leq r)\) a \(x\) \((1 \leq x \leq c)\) – súradnice kliknutého políčka.

Na prvom riadku vypíšte jedno číslo – počet mapiek, ktoré vypíšete. Ďalej vypíšte jednotlivé mapky – na reprezentáciu mín použite znak #, na prázdne políčka znak . (bodka).

Ak takáto množina mapiek neexistuje, vypíšte jediný riadok obsahujúci číslo \(-1\).

Príklad

Input:

4 4
2 2

Output:

3
...#
....
...#
#.##

....
...#
...#
#.#.

...#
....
...#
.##.

Toto riešenie nie je korektným riešením úlohy, ukazuje však formát výstupu. Prázdne riadky medzi mapkami boli pridané pre prehľadnosť, vo vašich programoch ich nevypisujte.


  1. Malých mäkkých desať okien.


(C) MišoF, Zemčo. 2007 - 2013